/*
 * BitArray.h
 *
 *  Created on: 12/02/2012
 *      Author: marcio
 */

#ifndef BITARRAY_H_
#define BITARRAY_H_

typedef struct bitarray{
	char* elem;
	int size;
	int vectorsz;
}BitArray;

int bitarray_setbit(BitArray* a, int i);

int bitarray_unsetbit(BitArray* a, int i);

int bitarray_isset(BitArray* a, int i);

BitArray* bitarray_newBitArray(int size);

BitArray* bitarray_and(BitArray* a, BitArray* b);

BitArray* bitarray_or(BitArray* a, BitArray* b);

BitArray* bitarray_exclusiveOr(BitArray* a, BitArray* b);

void bitarray_andRef(BitArray* a, BitArray* b);

void bitarray_orRef(BitArray* a, BitArray* b);

void bitarray_exclusiveOrRef(BitArray* a, BitArray* b);

BitArray* bitarray_not(BitArray* a);

BitArray* bitarray_nand(BitArray* a, BitArray* b);

BitArray* bitarray_nor(BitArray* a, BitArray* b);

BitArray* bitarray_nexclusiveOr(BitArray* a, BitArray* b);

void bitarray_notRef(BitArray* a);

void bitarray_nandRef(BitArray* a, BitArray* b);

void bitarray_norRef(BitArray* a, BitArray* b);

void bitarray_nexclusiveOrRef(BitArray* a, BitArray* b);

int bitarray_count1(BitArray* a);

int bitarray_count0(BitArray* a);

int* bitarray_1toArray(BitArray* a);

int* bitarray_0toArray(BitArray* a);

int bitarray_delete(BitArray* a);

#endif /* BITARRAY_H_ */
